Шаг 650 - CDC::CreateCompatibleDC.

Автор Каев А. Г.
virtual BOOL CreateCompatibleDC( CDC* pDC );

Возвращаемое значение
Отлично от нуля если функция успешна, иначе 0.

Параметры
pDC
Указатель на контекст устройства. Если pDC NULL функция создает контекст устройства памяти, который является совместимым с дисплеем системы.

Замечания
Создает контекст устройства памяти, который является совместимым с устройством, определенным pDC. Контекст устройства памяти - блок памяти, которая представляет поверхность отображения. Это может использоваться, чтобы готовить изображения в памяти перед копированием их к фактической поверхности устройства совместимого устройства.
Когда контекст устройства памяти создан, GDI автоматически выбирает одноцветный точечный рисунок для этого. GDI функции вывода могут использоваться с контекстом устройства памяти только, если точечный рисунок был создан и выбран в тот контекст.
Эта функция может только использоваться, чтобы создать совместимые контексты устройства для операции растра поддержки. Чтобы определять, поддерживает ли контекст устройства, растровые операции, посмотрите RC_BITBLT растровую возможность в функции CDC::GetDeviceCaps.

Пример

// Этот OnDraw ()  загружает точечный рисунок из ресурсов системы,
// Выравнивает по центру это в просмотре, и использует BitBlt()  
// чтобы отрисовать точечный рисунок

void CBlat2View::OnDraw(CDC* pDC)
{
   CBlat2Doc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);

   // Загрузите IDB_BITMAP1 из наших ресурсов
   CBitmap bmp;
   if (bmp.LoadBitmap(IDB_BITMAP1))
   {
      // Получите размер точечного рисунка
      BITMAP bmpInfo;
      bmp.GetBitmap(&bmpInfo);

      // Создать в оперативной памяти DC совместимый с
      // экранным DC, который мы используем, чтобы рисовать
      CDC dcMemory;
      dcMemory.CreateCompatibleDC(pDC);

      // Выберите точечный рисунок в в оперативной памяти DC
      CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);

      // Найдите центральную точку для точечного рисунка в клиентской области
      CRect rect;
      GetClientRect(&rect);
      int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2;
      int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;

      // Копировать биты с в оперативной памяти DC  на -
      // экран DC, чтобы фактически делать рисование. Используйте центральную точку
      // что бы  вычислили смещения.
      pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 
         0, 0, SRCCOPY);
      dcMemory.SelectObject(pOldBitmap);
   }
   else
      TRACE0("ERROR: Where's IDB_BITMAP1?\n");
}

Hosted by uCoz